package br.com.harley.torneio.business;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.inject.Inject;

import org.slf4j.Logger;

import br.com.harley.torneio.constant.MensagemAplicacaoErro;
import br.com.harley.torneio.domain.Jogador;
import br.com.harley.torneio.domain.StatusTorneio;
import br.com.harley.torneio.domain.Torneio;
import br.com.harley.torneio.domain.TorneioJogador;
import br.com.harley.torneio.exception.NegocioException;
import br.com.harley.torneio.util.MensagemUtil;
import br.gov.frameworkdemoiselle.annotation.Name;
import br.gov.frameworkdemoiselle.message.Message;
import br.gov.frameworkdemoiselle.stereotype.BusinessController;
import br.gov.frameworkdemoiselle.transaction.Transactional;

@Name("realizarInscricaoBC")
@BusinessController
public class RealizarInscricaoBC implements IBaseBC {

	@Inject
	private MensagemUtil mensagemUtil;

	@Inject
	private TorneioJogadorBC torneioJogadorBC;

	/**
	 * {@link Logger} da classe.
	 */
	@SuppressWarnings("unused")
	@Inject
	private Logger logger;

	@Transactional
	public void realizarInscricao(Jogador jogador, Torneio torneio) throws NegocioException {
		Date hoje = new Date();
		if (torneio.getStatus().equals(StatusTorneio.INSCRICOES_ABERTAS) && hoje.before(torneio.getDtFimInscricoes())) {
			TorneioJogador torneioJogador = new TorneioJogador();
			torneioJogador.setTorneio(torneio);
			torneioJogador.setJogador(jogador);
			torneioJogadorBC.insert(torneioJogador);
		} else {
			List<Message> msgs = new ArrayList<Message>();
			msgs.add(mensagemUtil.buscaMensagem(MensagemAplicacaoErro.NAO_PODE_INSCREVER_JOGADOR));
			throw new NegocioException("Erro ao tentar inscrever jogador em torneio.", msgs);
		}

	}

	/**
	 * {@inheritDoc}
	 */
	public void setLogger(Logger logger) {
		this.logger = logger;
	}

	public void setMensagemUtil(MensagemUtil mensagemUtil) {
		this.mensagemUtil = mensagemUtil;
	}

	public void setTorneioJogadorBC(TorneioJogadorBC torneioJogadorBC) {
		this.torneioJogadorBC = torneioJogadorBC;
	}

}